/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.losalpes.catalog;

import com.losalpes.persistence.IPersistenceServices;
import com.losalpes.persistence.entity.Mueble;
import com.losalpes.persistence.entity.TipoMueble;
import java.util.List;
import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author MER
 */
@Stateless
@DeclareRoles({"admin"})
public class CatalogServices implements ICatalogService {

    @EJB
    private IPersistenceServices ips;

    /**
     * Inserta un nuevo mueble
     * @param cMueble
     */
    @RolesAllowed({"admin"})
    public void add(Mueble cMueble) {
        ips.create(cMueble);
    }

    /**
     * Retorna la lista de muebles existentes en el sistema
     * @return Colección de muebles
     */
    public List findAllMuebles() {
        return ips.findAll(Mueble.class);
    }

    /**
     * Retorna un mueble, buscado por su referencia
     * @param ref Identificador del mueble
     * @return Objeto de tipo mueble
     */
    public Object findByRef(Object ref) {
        return ips.findById(Mueble.class, ref);
    }

    /**
     * Modifica un mueble
     * @param obj Mueble
     */
    @RolesAllowed({"admin"})
    public void update(Object obj) {
        ips.update(obj);
    }

    /**
     * Elimina un mueble
     * @param obj Mueble
     */
    @RolesAllowed({"admin"})
    public void delete(Object obj) {
        ips.delete(obj);
    }

    /**
     * Actualiza el precio y la cantidad de un mueble, luego de
     * buscarlo por su referencia
     * @param ref Referencia del mueble
     * @param precio Precio del mueble
     * @param cantidad Cantidad en inventario
     * @return
     */
    public Object setPrecioCantidadByRef(Object ref, double precio, double cantidad) {
        return null;
    }

    /**
     * Modifica un mueble de la lista
     * @param obj Mueble
     */
    public void updatePrecioCantidad(Object obj) {
        //catalogPersistenceServices.updatePrecioCantidad(obj);
    }

    /**
     * Permite obtener los muebles que pertenecen a un tipo de mueble en particular
     * @param tipoMueble Tipo de muebles por buscar
     * @return Colección de muebles del tipo seleccionado
     */
    public List<Mueble> findByType(TipoMueble tipoMueble) {
        return ips.findMuebleByType(tipoMueble);
    }

}
